perm filename SIG.MAC[4,ALS] blob
sn#054417 filedate 1973-07-19 generic text, type T, neo UTF8
00010 TITLE SIG
00020
00030 ENTRY SIG
00040
00050 ;Signature table processing routine. July 16,1973.
00060 ;Designed for 256 word tables.
00070 EXTERNAL USE,LRN,HINT,UPCNT
00080 EXTERNAL INDAT,INCNT,FLAG
00090 EXTERNAL SEGC
00100 EXTERNAL IN1,IN2,IN3,IN4,NAMES,OUTPUT,PARENT
00110 EXTERNAL OUT1,OUT2,OUT3,OUT4,PHW,LRN1,LRN2,LRN3,LRN4
00120 EXTERNAL LEVEL,CMAX,START,STOP
00130 EXTERNAL CFLAG
00140
00150 ;Name Contents of arrays used in SIG
00160 ;PHLIST 6-bit name of phonette
00170 ;FLIST 6-bit name of feature
00180 ;HLIST word with 1's at locations corresponding to feature index
00190 ;PARENT POINT word specifying field in an OUTPUT word of PARENT
00200 ;IN1 POINT word to correct number of bits in an INDAT word
00210 ;IN2 POINT word to correct number of bits in an INDAT word
00220 ;IN3 POINT word to correct number of bits in an INDAT word
00230 ;IN4 POINT word to correct number of bits in an INDAT word
00240 ;OUT1 6-bit name of output Ph or Feature
00250 ;OUT2 6-bit name of output Ph or Feature
00260 ;OUT3 6-bit name of output Ph or Feature
00270 ;OUT4 6-bit name of output Ph or Feature
00280 ;LRN1 0 if OUT1 is a Ph or else HLIST type word
00290 ;LRN2 0 if OUT2 is a Ph or else HLIST type word
00300 ;LRN3 0 if OUT3 is a Ph or else HLIST type word
00310 ;LRN4 0 if OUT4 is a Ph or else HLIST type word
00320 ;LEVEL 4 fields with counter levels in range 0 th 511
00330 ;CMAX 4 fields with maximum outputs during segment
00340 ;START 4 fields with starting SEGC values (actually +1)
00350 ;STOP 4 fields wsed to store indication of end of segment
00360 ;OUTPUT 4 probability values for the 4 out properties
00370
00380
00390 ;Index register assignments
00400 ;Regester Usage
00410 Z=0 ; general purpose register
00420 I=1 ;Used to index ITEMS IN HEADER TABLES
00430 J=2 ;Used to index within tables
00440 K=3 ;Special purpose indexing and general use when Z not wanted
00450 L=4
00460 M1=5 ;Used to hold counter bit
00470 M2=6 ;Used for the 2nd field
00480 IN=7 ;Used to hold start of INDAT array
00490 M3=10 ;Used for the 3rh field
00500 M4=11 ;Used for the 4th field
00510 S=12
00520 OU=13 ;Reserved exclusively for start of output array
00530 T=14 ;Used to index thru TABLES
00540 H=15 ;Used to hold HINT word
00550 P=16 ;Used to hold start of array PARENT
00560 X=17 ;Used to index in buckets
00570
00580 SIG: 0
00590 MOVEM 17,SAVE+17
00600 MOVE 17,[XWD 0,SAVE]
00610 BLT 17,SAVE+16
00620
00630 SKIPE FLAG
00640 JRST A1 ;Addrtss fields already set up
00650
00660 MOVE Z,IN1 ;Start of array IN1
00670 HRRM Z,IN1A ;Pre set address fields in progral
00680 HRRM Z,IN1B
00690
00700 MOVE Z,IN2
00710 HRRM Z,IN2A
00720 HRRM Z,IN2B
00730
00740 MOVE Z,IN3
00750 HRRM Z,IN3A
00760 HRRM Z,IN3B
00770
00780 MOVE Z,IN4
00790 HRRM Z,IN4A
00800 HRRM Z,IN4B
00810
00820 MOVE Z,OUTPUT
00830 HRRM Z,OUTA
00840 HRRM Z,OUTB
00850 HRRM Z,OUTC
00860 HRRM Z,OUTD
00870
00880 MOVE Z,USE
00890 HRRM Z,USEA
00900
00910 MOVE Z,LRN
00920 HRRM Z,ADDM1
00930 HRRM Z,ADDM2
00940 HRRM Z,ADDM3
00950 HRRM Z,ADDM4
00960
00970 MOVE Z,NAMES
00980 HRRM Z,NAMA
00990
01000 MOVE Z,PARENT
01010 HRRM Z,PARA
01020
01030 MOVE Z,OUT1
01040 HRRM Z,OUT1A
01045 HRRM Z,OUT1L
01050 MOVE Z,LRN1
01060 HRRM Z,LRN1A
01070
01080 MOVE Z,OUT2
01090 HRRM Z,OUT2A
01095 HRRM Z,OUT2L
01100 MOVE Z,LRN2
01110 HRRM Z,LRN2A
01120
01130 MOVE Z,OUT3
01140 HRRM Z,OUT3A
01145 HRRM Z,OUT3L
01150 MOVE Z,LRN3
01160 HRRM Z,LRN3A
01170
01180 MOVE Z,OUT4
01190 HRRM Z,OUT4A
01195 HRRM Z,OUT4L
01200 MOVE Z,LRN4
01210 HRRM Z,LRN4A
01220
01230 MOVE Z,LEVEL
01240 HRRM Z,LEVELA
01250 HRRM Z,LEVELB
01260 HRRM Z,LEVELC
01270 HRRM Z,LEVELD
01280
01290 MOVE Z,CMAX
01300 HRRM Z,MAXCA
01310 HRRM Z,MAXCB
01320 HRRM Z,MAXCC
01330 HRRM Z,MAXCD
01340
01350 MOVE Z,START
01360 HRRM Z,STARTA
01370 HRRM Z,STARTB
01380 HRRM Z,STARTC
01390 HRRM Z,STARTD
01400
01410 MOVE Z,STOP
01420 HRRM Z,STOPA
01430 HRRM Z,STOPB
01440 HRRM Z,STOPC
01450 HRRM Z,STOPD
01460
01470 JRST FINISH
01480
01490 A1: MOVE IN,INDAT ;Required by MAKE made pointers
01500 MOVE OU,OUTPUT
01510 MOVE P,PARENT
01520 SETZ I,
01530 SETZ T,
01540 MOVSI M1,1000
01550 MOVSI M2,1
01560 MOVEI M3,1000
01570 MOVEI M4,1
01580
01590
01600 NAMA: SKIPN 0(I) ;Set to first item in names array
01610 JRST FINISH
01620
01630 IN1A: LDB J,0(I) ;Concatenate for index to line
01640 IN2A: LDB K,0(I) ;IN address fields preset above
01650 LDB L,IN2B ;To get shift value from IN2
01660 LSH J,@L
01670 ADD J,K
01680 IN3A: LDB K,0(I)
01690 LDB L,IN3B
01700 JUMPE L,A2
01710 LSH J,@L
01720 ADD J,K
01730 IN4A: LDB K,0(I)
01740 LDB L,IN4B
01750 JUMPE L,A2
01760 LSH J,@L
01770 ADD J,K
01780 A2: ADD J,T
01790 SKIPG FLAG
01800 JRST L1
01810 USEA: MOVE K,0(J)
01820 PARA: MOVE X,0(I)
01830 LDB L,X
01840 SKIPN X
01850 MOVEI L,1000
01860
01870 MOVEI X,3
01880 CNT: SKIPN @OUT1L(X)
01885 JRST CNT4 ;Unused output field
01887 LDB Z,POINTA(X) ;Get current output
01890 IMUL Z,L ;Multiply by parent value
01900 LSH Z,-11 ;Divide by 512
01910 LDB M1,OUTA(X) ;Retrieve older value
01920 DPB Z,OUTA(X) ;Save new value
01930 LDB M3,MAXCA(X) ;This is used to test state
01940 LDB M2,LEVELA(X) ;The preset counter level
01950 CAMGE Z,M2
01960 JRST CNT3 ;Below threshold
01970
01980 JUMPE M3,CNT2 ;Was in off state
01990 CAMLE Z,M3 ;In on state so save max
02000 DPB Z,MAXCA(X) ;Save if larger
02010 JRST CNT4
02020
02030 CNT2: CAMGE M1,M2 ;Was earlier one over
02040 JRST CNT4 ;No so through
02050
02060 CAMGE Z,M1 ;Find larger
02070 MOVE Z,M1
02080 DPB Z,MAXCA(X) ;and save
02090 MOVE Z,SEGC ;Get location
02095 SUBI Z,1 ;back 1
02100 DPB Z,STARTA(X) ;and save
02110 JRST CNT4
02120
02130 CNT3: JUMPE M3,CNT4 ;Already in off state
02140 CAML M1,M2 ;Test older one
02150 JRST CNT4 ;Not time to stop
02160 AOS CFLAG ;Time to stop
02170 DPB M3,STOPA(X) ;Stop flag
02180
02190 CNT4: SOJGE X,CNT ;Go around again
02200
02210 ADDI T,400
02220 AOJA I,NAMA
02230
02240 L1:
02250
02260 LRN1A: SKIPE K,0(I)
02270 JRST FEAT1
02280 OUT1A: MOVE K,0(I)
02290 CAME K,PHW
02300 JRST LRN2A
02310 ADDM1: ADDM M1,0(J)
02320 JRST LRN2A
02330 FEAT1: AND K,HINT
02340 JUMPN K,ADDM1
02350
02360 LRN2A: SKIPE K,0(I)
02370 JRST FEAT2
02380 OUT2A: MOVE K,0(I)
02390 CAME K,PHW
02400 JRST LRN3A
02410 ADDM2: ADDM M2,0(J)
02420 JRST LRN3A
02430 FEAT2: AND K,HINT
02440 JUMPN K,ADDM2
02450
02460 LRN3A: SKIPE K,0(I)
02470 JRST FEAT3
02480 OUT3A: MOVE K,0(I)
02490 CAME K,PHW
02500 JRST LRN4A
02510 ADDM3: ADDM M3,0(J)
02520 JRST LRN4A
02530 FEAT3: AND K,HINT
02540 JUMPN K,ADDM3
02550
02560 LRN4A: SKIPE K,0(I)
02570 JRST FEAT4
02580 OUT4A: MOVE K,0(I)
02590 CAME K,PHW
02600 JRST LRNEX
02610 ADDM4: ADDM M4,0(J)
02620 JRST LRNEX
02630 FEAT4: AND K,HINT
02640 JUMPN K,ADDM4
02650 LRNEX: ADDI T,400
02660 AOJA I,NAMA
02670
02680 FINISH: MOVE 17,[XWD SAVE,0]
02690 BLT 17,17
02700 JRA 16,1(16)
02710
02720
02730 SAVE: BLOCK 20
02740 SUM: Z
02750
02760
02770 POINTA: POINT 9,K,8
02780 POINTB: POINT 9,K,17
02790 POINTC: POINT 9,K,26
02800 POINTD: POINT 9,K,35
02810
02820 OUTA: POINT 9,0(I),8
02830 OUTB: POINT 9,0(I),17
02840 OUTC: POINT 9,0(I),26
02850 OUTD: POINT 9,0(I),35
02860
02870 IN1B: POINT 3,0(I),11
02880 IN2B: POINT 3,0(I),11
02890 IN3B: POINT 3,0(I),11
02900 IN4B: POINT 3,0(I),11
02910
02920 LEVELA: POINT 9,0(I),8
02930 LEVELB: POINT 9,0(I),17
02940 LEVELC: POINT 9,0(I),26
02950 LEVELD: POINT 9,0(I),35
02960
02970 MAXCA: POINT 9,0(I),8
02980 MAXCB: POINT 9,0(I),17
02990 MAXCC: POINT 9,0(I),26
03000 MAXCD: POINT 9,0(I),35
03010
03020 STARTA: POINT 9,0(I),8
03030 STARTB: POINT 9,0(I),17
03040 STARTC: POINT 9,0(I),26
03050 STARTD: POINT 9,0(I),35
03060
03070 STOPA: POINT 9,0(I),8
03080 STOPB: POINT 9,0(I),17
03090 STOPC: POINT 9,0(I),26
03100 STOPD: POINT 9,0(I),35
03110
03111 OUT1L: JRST 0(I) ;Address of OUT1
03112 OUT2L: JRST 0(I)
03113 OUT3L: JRST 0(I)
03114 OUT4L: JRST 0(I)
03115
03120 END